Skip to content
This repository has been archived by the owner on Sep 1, 2020. It is now read-only.

Latest commit

 

History

History
14 lines (9 loc) · 913 Bytes

1.7.2 - 4.3.0 延时事件机制改进.md

File metadata and controls

14 lines (9 loc) · 913 Bytes

4.3.0 延时事件机制改进

4.3.0之前的版本,swoole_event_defer方法底层的延时事件机制,存在一些问题。

  • Reactor::wait之前创建的defer任务,没有事件发生时无法触发,为了解决此问题,底层会在这种情况下,将延时任务转换为1ms的定时器
  • 在延时任务中添加延时任务,会在循环执行,而不是在下一次epoll_wait后执行
  • 延时任务无法阻挡Reactor退出,导致某些延时任务可能会丢失

新版本改进了延时任务机制,现在更安全,代码更简洁。

  • 有延时任务时,将epoll_wait的超时事件设置为0,即使没有任何事件触发,依然可以立即去执行延时任务,而不依赖定时器
  • 有延时任务时,Reactor必须要全部执行完成后才会退出
  • 在延时任务中添加延时任务,将会在下一次epoll_wait后执行